﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;
using System.Web.Mvc;
using PagedList;


namespace CultuRAM.Models
{
    public class UsersContext : DbContext
    {
        public UsersContext()
            : base("DefaultConnection")
        {
        }

        public DbSet<UserProfile> UserProfiles { get; set; }
    }

    public class RegisterExternalLoginModel
    {
        [Required]
        [Display(Name = "Nome de Utilizador")]
        public string UserName { get; set; }

        public string ExternalLoginData { get; set; }
    }

    ////adicionado
    //public class RolesManager
    //{
    //    public int RoleId { get; set; }

    //    [Required]
    //    [Display(Name = "Grupo")]
    //    public string RoleName { get; set; }

    //    public IEnumerable<RolesManager> Roles { get; set; }
    //}

    public class LocalPasswordModel
    {
        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "Palavra-passe Atual")]
        public string OldPassword { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "A {0} deve ter pelo menos {2} caracteres.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Nova Palavra-passe")]
        public string NewPassword { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirme a nova palavra-passe")]
        [System.Web.Mvc.Compare("NewPassword", ErrorMessage = "A nova palavra-passe e a palavra-passe de confirmação não são iguais.")]
        public string ConfirmPassword { get; set; }
    }

    public class LoginModel
    {
        [Required(ErrorMessage = "Por favor, insira um email válido.")]
        [DataType(DataType.EmailAddress)]
        [RegularExpression(@"[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}", ErrorMessage = "Por favor, insira um {0} válido.")]
        [Display(Name = "Email")]
        public string Email { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "A {0} deve ter pelo menos {2} caracteres.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Palavra-passe")]
        public string Password { get; set; }

        [Display(Name = "Manter sessão inciada?")]
        public bool RememberMe { get; set; }

        //public string MsgError { get; set; }
    }

    public class RegisterModel
    {
        [Required]
        [Display(Name = "Nome")]
        public string UserName { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "A {0} deve ter pelo menos {2} caracteres.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Palavra-passe")]
        public string Password { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirme a palavra-passe")]
        [System.Web.Mvc.Compare("Password", ErrorMessage = "A nova palavra-passe e a palavra-passe de confirmação não são iguais.")]
        public string ConfirmPassword { get; set; }

        [Required(ErrorMessage = "Por favor, insira um email válido.")]
        [DataType(DataType.EmailAddress)]
        [RegularExpression(@"[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}", ErrorMessage = "Por favor, insira um {0} válido.")]
        [Display(Name = "Email")]
        public string Email { get; set; }

        [Required(ErrorMessage = "Selecione um Grupo")]
        [Display(Name = "Grupo")]
        public string RoleName { get; set; }

        [Required(ErrorMessage = "Selecione uma Entidade")]
        [Display(Name = "Entidade")]
        public int EntityId { get; set; }

        public virtual Entity Entity { get; set; }

        public IEnumerable<SelectListItem> RolesList { get; set; } //add
        public IPagedList<UserProfile> UsersProfile { get; set; } //add
        public IEnumerable<SelectListItem> EntitiesList { get; set; } //add
    }

    public class ExternalLogin
    {
        public string Provider { get; set; }
        public string ProviderDisplayName { get; set; }
        public string ProviderUserId { get; set; }
    }
}
